package com.turingitclub.yutian;

/**
 * <pre>
 * class修饰类类型
 * 类类型，属于引用类型
 * 引用类型，包括类类型、数组类型等
 * class 类，都默认继承了Object的方法，允许重写这些继承的方法
 * </pre>
 *
 * @author zhoulei
 * @create 2020-03-14 19:43
 **/
public class Student {
    /**
     * 正常体温
     * 静态static表示该变量属于类Student，而不是new Student对象的
     * 也被称作静态成员、静态属性
     */
    private static final double NORMAL_TEMPERATURE = 37.0;

    /**
     * static静态，说明是属于类，而不是属于对象（实例）
     * 静态方法，才能访问静态成员
     * new Student()对象,可以访问类的static静态成员、static静态方法
     * 但是类的static静态方法，不能访问对象的属性、方法（非静态的）
     * @return
     */
    public static double getNormalTemperature(){
        //System.out.println(getName()); error
        return NORMAL_TEMPERATURE;
    }

    /**
     * 成员变量、也叫对象属性、实例变量
     * String，是类类型，即name本身是一种类类型变量。
     * 当成员变量是类类型变量时，默认null
     */
    private String name;

    /**
     * 对象属性
     * double，是基础类型，默认0
     */
    private double temperature;

    /**
     * 默认构造函数，不写也存在
     */
    public Student() {
    }

    /**
     * 带参数的构造函数，非默认
     * @param name
     */
    public Student(String name) {
        this.name = name;
    }

    /**
     * 对象方法，也叫对象行为或实例函数
     * @return
     */
    public String getName(){
        // this是new Student得到的实例
        return this.name;
    }

    public Double getTemperature(){
        return this.temperature;
    }

    public void setTemperature(Double temperature){
        this.temperature = temperature;
    }

    /**
     * 重写从Object默认继承的方法
     * equals()比较的是对象的内容，但是如果使用“==”比较两个对象时，比较的是两个对象的内存地址，所以不相等。即使它们内容相等，但是不同对象的内存地址也是不相同的。
     * @return
     */
    @Override
    public boolean equals(Object obj) {
        return ((Student)obj).getName() == this.getName(); // error 不应该使用"=="
    }
    /**
     * 重写从Object默认继承的方法
     * @return
     */
    @Override
    public String toString() {
        return "姓名："+this.name +"; 温度：" + this.temperature;
    }
}
